<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //          克隆
        // 浅层克隆
        // 深层克隆

        //例：
        // var obj = {
        //     name: 'abc',
        //     age: 123,
        //     sex: 'female'
        // }
        // var obj1 = {}

        // function clone(origin, target) {
        //     var target = target || {};
        //     for (var prop in origin) {
        //         target[prop] = origin[prop];
        //     }
        // }
        // clone(obj, obj1);




        // 计算数组的每个元素的平方，返回新数组
        // function Square(arr) {
        //     var arrs = [];
        //     var len = arr.length;
        //     for (var i = 0; i < len; i++) {
        //         arrs.push(arr[i] * arr[i]);
        //     }
        //     return arrs;
        // }

        // // es5 Array.prototype.map
        // function S(arr) {
        //     return arr.map(function(item) {
        //         return item * item;
        //     })
        // }
        // var arr = [1, 2, 3, 4, 5];
        // var arrs = Square(arr);
        // console.log(arrs);






        //深层克隆
        // var obj = {
        //     name: 'abc',
        //     age: 20,
        //     card: ['visa', 'master'],
        //     wife: {
        //         name: 'bcd',
        //         son: {
        //             name: 'aaa'
        //         }
        //     }
        // }
        // var obj1 = {}

        //     //遍历对象   for(var prop in obj)
        //     //1.判断是不是原始值   typeof() 
        //     //2.判断是数组还是对象   toString instanceof constructor
        //     //3.建立对应的数组或对象
        //     //4.递归
        // hasOwnProperty表示是否有自己的属性。
        // 这个方法会查找一个对象是否有某个属性，但是不会去查找它的原型链


        // function deepClone(origin, target) {
        //     var target = target || {},
        //         toStr = Object.prototype.toString,
        //         arrStr = '[object Array]';

        //     for (var prop in origin) {
        //         if (origin.hasOwnProperty(prop)) {
        //             if (origin[prop] !== 'null' && typeof(origin[prop]) == 'object ') {
        //                 if (toStr.call(origin[prop]) == arrStr) {
        //                     target[prop] = [];
        //                 } else {
        //                     target[prop] = {};
        //                 }
        //                 deepClone(origin[prop], target[prop]);
        //             } else {
        //                 target[prop] = origin[prop];
        //             }
        //         }
        //     }
        //     return target;
        // }
        // deepClone(obj, obj1);
    </script>
</body>

</html>